package ypx;

import org.testng.annotations.Test;

import java.util.ArrayList;
import java.util.List;

import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;


public class StreamDemo {
    public static void main(String[] args) {
        List<String> names  = new ArrayList<>();
        names.add("张三");
        names.add("张三丰");
        names.add("张无忌");
        names.add("张翠山");
        names.add("赵敏");
        names.add("赵六");

        List<String> list1 = new ArrayList<>();
        names.forEach(name -> {
            if (name.startsWith("张")) {
                list1.add(name);
            }
        });
        //去掉长度为不=3的名字
        List<String> list2 = new ArrayList<>();
        list1.forEach(name -> {
            if (name.length() == 3) {
                list2.add(name);
            }
        });
        list2.forEach(System.out::println);

        System.out.println("-----------");



        //获取流对象
        names.stream().
                filter(name -> name.startsWith("张")&& name.length() == 3).
                forEach(System.out::println);

    }
    @Test
    public void test(){
        List<Integer> list  = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        list.add(7);
        list.add(8);
        list.add(9);
        list.add(10);
//        list.stream().filter(new Predicate<Integer>() {
//            @Override
//            public boolean test(Integer integer) {
//                return integer % 2 == 0;
//            }
//            });

        List<Integer> list1 = list.stream().filter(integer -> integer % 2 == 0).collect(Collectors.toList());
        System.out.println(list1);
    }

    @Test
    public void test2() {
        List<String> list = new ArrayList<>();
        list.add("张三，23");
        list.add("李四，20");
        list.add("王五，22");
        list.stream().filter(s -> {
            String[] split = s.split(",");

            int age = Integer.parseInt(split[1]);
            return age >= 22;
        }).collect(Collectors.toMap(s -> {
            String[] splits = s.split(",");
            return splits[0];
        }, s -> {
            String[] splits = s.split(",");
            return splits[0];
        }));

    }

    @Test
    public void test3() {
        //男演员
        List<String> list1 = new ArrayList<>();
        list1.add("佟大为");
        list1.add("邓超");
        list1.add("郭富城");
        list1.add("成龙");
        list1.add("黄子涛");
        //女演员
        List<String> list2 = new ArrayList<>();
        list2.add("杨紫");
        list2.add("高圆圆");
        list2.add("张丽娜");
        list2.add("唐嫣");
        list2.add("刘亦菲");
        list2.add("杨幂");


        Stream<String> stream1 = list1.stream().filter(s -> s.length() == 3).limit(2);
        Stream<String> stream2 = list2.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.startsWith("杨");
            }
        }).skip(1);

// 修改stream2的定义（去掉skip(1)）
       // Stream<String> stream2 = list2.stream().filter(s -> s.startsWith("杨"));


         //合并流
        Stream.concat(stream1,stream2).forEach(System.out::println);
    }

}

